// input.h - WGAL Input manager
#ifndef WGAL_INPUT_H
#define WGAL_INPUT_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <wgal/common.h>

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

	WGALAPI WGALVoid wgalUpdateInputState();
	WGALAPI WGALInt32 wgalGetKeyState(WGALUInt32 keyCode);
	WGALAPI WGALBool wgalIsKeyUp(WGALUInt32 keyCode);
	WGALAPI WGALBool wgalIsKeyDown(WGALUInt32 keyCode);
	WGALAPI WGALBool wgalIsKeyPressed(WGALUInt32 keyCode);
	WGALAPI WGALBool wgalIsKeyReleased(WGALUInt32 keyCode);
	WGALAPI WGALInt32 wgalGetCursorX();
	WGALAPI WGALInt32 wgalGetCursorY();
	WGALAPI WGALBool wgalGetCursorPos(WGALLocation);

#ifdef __cplusplus
}
#endif // __cplusplus

// keycodes
#define WGAL_KC_LBUTTON			0x00
#define WGAL_KC_RBUTTON			0x01
#define WGAL_KC_MBUTTON			0x02
#define WGAL_KC_XBUTTON1		0x03
#define WGAL_KC_XBUTTON2		0x04
#define WGAL_KC_BACKSPACE		0x05
#define WGAL_KC_TAB				0x06
#define WGAL_KC_ENTER			0x07
#define WGAL_KC_SHIFT			0x08
#define WGAL_KC_CTRL			0x09
#define WGAL_KC_ALT				0x0A
#define	WGAL_KC_PAUSE			0x0B
#define WGAL_KC_CAPSLOCK		0x0C
#define WGAL_KC_ESCAPE			0x0D
#define WGAL_KC_SPACE			0x0E
#define WGAL_KC_PAGEUP			0x0F
#define WGAL_KC_PAGEDOWN		0x10
#define WGAL_KC_END				0x11
#define WGAL_KC_HOME			0x12
#define WGAL_KC_LEFT			0x13
#define WGAL_KC_UP				0x14
#define WGAL_KC_RIGHT			0x15
#define WGAL_KC_DOWN			0x16
#define WGAL_KC_PRINTSCRN		0x17
#define WGAL_KC_INSERT			0x18
#define WGAL_KC_DELETE			0x19
#define WGAL_KC_0				0x1A
#define WGAL_KC_1				0x1B
#define WGAL_KC_2				0x1C
#define WGAL_KC_3				0x1D
#define WGAL_KC_4				0x1E
#define WGAL_KC_5				0x1F
#define WGAL_KC_6				0x20
#define WGAL_KC_7				0x21
#define WGAL_KC_8				0x22
#define WGAL_KC_9				0x23
#define WGAL_KC_A				0x24
#define WGAL_KC_B				0x25
#define WGAL_KC_C				0x26
#define WGAL_KC_D				0x27
#define WGAL_KC_E				0x28
#define WGAL_KC_F				0x29
#define WGAL_KC_G				0x2A
#define WGAL_KC_H				0x2B
#define WGAL_KC_I				0x2C
#define WGAL_KC_J				0x2D
#define WGAL_KC_K				0x2E
#define WGAL_KC_L				0x2F
#define WGAL_KC_M				0x30
#define WGAL_KC_N				0x31
#define WGAL_KC_O				0x32
#define WGAL_KC_P				0x33
#define WGAL_KC_Q				0x34
#define WGAL_KC_R				0x35
#define WGAL_KC_S				0x36
#define WGAL_KC_T				0x37
#define WGAL_KC_U				0x38
#define WGAL_KC_V				0x39
#define WGAL_KC_W				0x3A
#define WGAL_KC_X				0x3B
#define WGAL_KC_Y				0x3C
#define WGAL_KC_Z				0x3D
#define WGAL_KC_LWINDOWS		0x3E
#define WGAL_KC_RWINDOWS		0x3F
#define WGAL_KC_LSHIFT			0x40
#define WGAL_KC_RSHIFT			0x41
#define WGAL_KC_LCTRL			0x42
#define WGAL_KC_RCTRL			0x43
#define WGAL_KC_LALT			0x44
#define WGAL_KC_RALT			0x45
#define WGAL_KC_F1				0x46
#define WGAL_KC_F2				0x47
#define WGAL_KC_F3				0x48
#define WGAL_KC_F4				0x49
#define WGAL_KC_F5				0x4A
#define WGAL_KC_F6				0x4B
#define WGAL_KC_F7				0x4C
#define WGAL_KC_F8				0x4D
#define WGAL_KC_F9				0x4E
#define WGAL_KC_F10				0x4F
#define WGAL_KC_F11				0x50
#define WGAL_KC_F12				0x51
#define WGAL_KC_F13				0x52
#define WGAL_KC_F14				0x53
#define WGAL_KC_F15				0x54
#define WGAL_KC_F16				0x55
#define WGAL_KC_F17				0x56
#define WGAL_KC_F18				0x57
#define WGAL_KC_F19				0x58
#define WGAL_KC_F20				0x59
#define WGAL_KC_F21				0x5A
#define WGAL_KC_F22				0x5B
#define WGAL_KC_F23				0x5C
#define WGAL_KC_F24				0x5D
#define WGAL_KC_NUMPAD0			0x5E
#define WGAL_KC_NUMPAD1			0x5F
#define WGAL_KC_NUMPAD2			0x60
#define WGAL_KC_NUMPAD3			0x61
#define WGAL_KC_NUMPAD4			0x62
#define WGAL_KC_NUMPAD5			0x63
#define WGAL_KC_NUMPAD6			0x64
#define WGAL_KC_NUMPAD7			0x65
#define WGAL_KC_NUMPAD8			0x66
#define WGAL_KC_NUMPAD9			0x67
#define WGAL_KC_ADD				0x68
#define WGAL_KC_MULTIPLY		0x69
#define WGAL_KC_SEPARATOR		0x6A
#define WGAL_KC_SUBTRACT		0x6B
#define WGAL_KC_DECIMAL			0x6C
#define WGAL_KC_DIVIDE			0x6D
#define WGAL_KC_PLUS			0x6E
#define WGAL_KC_COMMA			0x6F
#define WGAL_KC_MINUS			0x70
#define WGAL_KC_PERIOD			0x71
#define WGAL_KC_SLASH			0x72
#define WGAL_KC_TILDE			0x73
#define WGAL_KC_LBRACE			0x74
#define WGAL_KC_BACKSLASH		0x75
#define WGAL_KC_RBRACE			0x76
#define WGAL_KC_QUOTE			0x77
#define WGAL_KC_NUMLOCK			0x78
#define WGAL_KC_SCROLLLOCK		0x79
#define WGAL_KC_SEMICOLON		0x7A
#define WGAL_KC_APPS			0x7B

// return codes
#define WGAL_INVALID_KEYCODE	-1
#define WGAL_KEY_UP				0
#define WGAL_KEY_DOWN			1
#define WGAL_KEY_PRESSED		2
#define WGAL_KEY_RELEASED		3


#endif // !WGAL_INPUT_H